﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web;

namespace Jxym.wlkc2011
{
    public class pdf2swf
    {
        private string _pdf2swf;
        private int _flashversion = 9;
        public string _outfilename = "";
        public pdf2swf(string pdf2swfExtPath, int flashversion)
        {
            _pdf2swf = pdf2swfExtPath;
            _flashversion = flashversion;
        }
        /// <summary>
        /// 开始转换
        /// </summary>
        /// <returns></returns>
        public string Start(string inputFilename)
        {
            string output = "";
            //判断pdf2swf.exe和输入文件路径是否正确
            if (!System.IO.File.Exists(_pdf2swf))
            {
                return _pdf2swf + "路径不存在";
            }
            if (!System.IO.File.Exists(inputFilename))
            {
                return inputFilename + "路径不存在";
            }
            string _outFilename = System.IO.Path.ChangeExtension(inputFilename, ".swf");
            if (this._outfilename != "")
            {
                _outFilename = this._outfilename;
            }

            //准备调用pdf2swf.exe
            System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo(_pdf2swf);
            //设置调用参数为隐藏窗口
            startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;//设置不显示窗口
            startInfo.RedirectStandardOutput = true; //重定向输出。设置为TRUE，这样我们就可以接收返回结果了。
            startInfo.CreateNoWindow = true;   //不创建窗口，相当于后台运行
            startInfo.UseShellExecute = false; //不使用系统Shell来启动程序
            startInfo.Arguments = "\"" + inputFilename + "\" -o \"" + _outFilename + "\" -T " + _flashversion + " -t "; //此处组合成pdf2swf.exe文件需要的参数即可

            System.Diagnostics.Process listFiles = new System.Diagnostics.Process();
           
            try
            {
                listFiles = System.Diagnostics.Process.Start(startInfo);//开始运行
                System.IO.StreamReader myOutput = listFiles.StandardOutput;//获取返回结果：RedirectStandardOutput = true时
                listFiles.WaitForExit(); //等待被调用程序结束。该函数有一个重载可以设置等待时间，如果被调用的程序在指定的时间无返回值，则自动向下执行，否则就一直等待。
                if (listFiles.HasExited)
                {
                    output = myOutput.ReadToEnd();//output为全局变量，用于保存返回结果。
                }
            }
            catch (Exception e)
            {
                output = e.Message;
            }
            finally
            {
                listFiles.Close();
                listFiles.Dispose();
            }
            return output;
        }
    }
}
